home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / helper / source / scrn.c < prev    next >
Text File  |  1991-10-18  |  11KB  |  322 lines

  1. /*
  2.  
  3. 01234567890123456789012345678901234567890123456789012345678901234567890123456789--------------------------------------------------------------------------------|                                                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx|--------------------------------------------------------------------------------|                        お好みのメニュ-をどうぞ                              ||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------|          作    品    名           ||         作    者    名        ||TMBD|--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆|
  4. 0      1         2         3         4         5         6         7
  5. 01234567890123456789012345678901234567890123456789012345678901234567890123456789|               作    品    名                ||         作    者    名        |--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------| 0123 プログラムがあるよ     | 前  項 | | 次  項 | 
  6. --------------------------------------------------------------------------------
  7. *********************/
  8.  
  9. #include    <stdio.h>
  10. #include    <stdlib.h>
  11. #include    <stdarg.h>
  12. #include    <mos.h>
  13. #include    "keyword.h"
  14. #include    "graphic.h"
  15. #include    "scrn.h"
  16. #include    "coldef.h"
  17.  
  18. #define    MSG_X        (49*8)
  19. #define    MSG_Y        4
  20. #define    MSG_X1        (MSG_X-4)
  21. #define    MSG_Y1        (MSG_Y-2)
  22. #define    MSG_X2        (MSG_X+29*8+3)
  23. #define    MSG_Y2        (MSG_Y+17)
  24.  
  25. #define CLER_X      (1*8)
  26. #define CLER_Y      26
  27. #define CLER_M      "最初にもどろう"
  28. #define    CLER_X1        (CLER_X-4)
  29. #define    CLER_Y1        (CLER_Y-2)
  30. #define    CLER_X2        (CLER_X+14*8+3)
  31. #define    CLER_Y2        (CLER_Y+17)
  32.  
  33. #define LIST_X      (17*8)
  34. #define LIST_Y      26
  35. #define LIST_M      "マニュアル表示"
  36. #define    LIST_X1        (LIST_X-4)
  37. #define    LIST_Y1        (LIST_Y-2)
  38. #define    LIST_X2        (LIST_X+14*8+3)
  39. #define    LIST_Y2        (LIST_Y+17)
  40.  
  41. #define PRNT_X      (33*8)
  42. #define PRNT_Y      26
  43. #define PRNT_M      "プリントアウト"
  44. #define    PRNT_X1        (PRNT_X-4)
  45. #define    PRNT_Y1        (PRNT_Y-2)
  46. #define    PRNT_X2        (PRNT_X+14*8+3)
  47. #define    PRNT_Y2        (PRNT_Y+17)
  48.  
  49. #define INST_X      (49*8)
  50. #define INST_Y      26
  51. #define INST_M      "コピ-しちゃう"
  52. #define    INST_X1        (INST_X-4)
  53. #define    INST_Y1        (INST_Y-2)
  54. #define    INST_X2        (INST_X+14*8+3)
  55. #define    INST_Y2        (INST_Y+17)
  56.  
  57. #define EXIT_X      (65*8)
  58. #define EXIT_Y      26
  59. #define EXIT_M      "終わっちゃうよ"
  60. #define    EXIT_X1        (EXIT_X-4)
  61. #define    EXIT_Y1        (EXIT_Y-2)
  62. #define    EXIT_X2        (EXIT_X+14*8+3)
  63. #define    EXIT_Y2        (EXIT_Y+17)
  64.  
  65. #define KEY_X       8
  66. #define KEY_Y       69
  67. #define KEY_L        (18*8)
  68. #define KEY_S        (20*8)
  69. #define KEY_POS_X(n)    ((n%4)*KEY_S+KEY_X)
  70. #define KEY_POS_Y(n)    ((n/4)*24+KEY_Y)
  71.  
  72. #define    PRG_NAME_X  8
  73. #define    PRG_MAKE_X  (47*8)
  74. #define    PRG_BITS_X  (71*8)
  75. #define    PRG_NAME_L  (44*8+6)
  76. #define    PRG_MAKE_L  (31*8+6)
  77. #define    PRG_BITS_L  (8*8)
  78. #define    PRG_Y        261
  79. #define PRG_POS_Y(n)    ((n)*22+PRG_Y)
  80.  
  81. #define    MSG2_X        (1*8)
  82. #define    MSG2_Y        460
  83.  
  84. #define    BACK_X        (29*8)
  85. #define    BACK_Y        460
  86. #define    BACK_M        " 前  頁 "
  87. #define    BACK_X1        (BACK_X-4)
  88. #define    BACK_Y1        (BACK_Y-2)
  89. #define    BACK_X2        (BACK_X+8*8+3)
  90. #define    BACK_Y2        (BACK_Y+17)
  91.  
  92. #define    NEXT_X        (39*8)
  93. #define    NEXT_Y        460
  94. #define    NEXT_M        " 次  頁 "
  95. #define    NEXT_X1        (NEXT_X-4)
  96. #define    NEXT_Y1        (NEXT_Y-2)
  97. #define    NEXT_X2        (NEXT_X+8*8+3)
  98. #define    NEXT_Y2        (NEXT_Y+17)
  99.  
  100. static    int    sw_flg[10];
  101.  
  102. int    MOS_stei(int x1,int y1,int x2,int y2)
  103. {
  104.     int     stat=0;
  105.     int     cl,sw,x,y;
  106.  
  107.     for ( ; ; ) {
  108.     MOS_rdpos(&sw,&x,&y);
  109.     if ( x >= x1 && x <= x2 && y >= y1 && y <= y2 )
  110.         cl = 1;
  111.     else
  112.         cl = 0;
  113.  
  114.     switch(stat) {
  115.     case 0:
  116.         if ( cl == 0 || sw == 0 )
  117.         return 0;
  118.         MOS_disp(OFF);
  119.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  120.         MOS_disp(ON);
  121.         stat = 1;
  122.         break;
  123.  
  124.     case 1:
  125.         if ( sw == 0 || cl == 0 ) {
  126.         MOS_disp(OFF);
  127.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  128.         MOS_disp(ON);
  129.             if ( sw == 0 && cl != 0 )
  130.             return 1;
  131.         else
  132.             return 0;
  133.         }
  134.         break;
  135.     }
  136.     }
  137. }
  138. int    MENU_no(int rc)
  139. {
  140.     int     i,sw,x,y;
  141.     static struct {
  142.     int    x1,y1,x2,y2;
  143.     int    no;
  144.     int    *sw;
  145.     } event_tbl[]={
  146.     { CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,CLER_NO,&sw_flg[0] },
  147.     { LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LIST_NO,&sw_flg[1] },
  148.     { PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,PRNT_NO,&sw_flg[2] },
  149.     { INST_X1,INST_Y1,INST_X2,INST_Y2,INST_NO,&sw_flg[3] },
  150.     { EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,EXIT_NO,&sw_flg[4] },
  151.     { BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,BACK_NO,&sw_flg[5] },
  152.     { NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,NEXT_NO,&sw_flg[6] },
  153.     { 0,0,0,0,NON_NO }
  154.     };
  155.  
  156.     MOS_rdpos(&sw,&x,&y);
  157.     if ( sw == 0 )
  158.     return NON_NO;
  159.  
  160.     for ( i = 0 ; event_tbl[i].no != NON_NO ; i++ ) {
  161.     if ( *event_tbl[i].sw != 0 &&
  162.          MOS_stei(event_tbl[i].x1,event_tbl[i].y1,
  163.               event_tbl[i].x2,event_tbl[i].y2) != 0 )
  164.         return event_tbl[i].no;
  165.     }
  166.  
  167.     if ( rc == 0 )
  168.     return NON_NO;
  169.  
  170.     for ( i = 0 ; i < 28 ; i++ ) {
  171.     if ( x >= (KEY_POS_X(i)-4) && y >= (KEY_POS_Y(i)-2) &&
  172.          x <= (KEY_POS_X(i)+KEY_L+3) && y <= (KEY_POS_Y(i)+17) )
  173.         return (KEY_NO + i);
  174.     }
  175.  
  176.     for ( i = 0 ; i < 9 ; i++ ) {
  177.     if ( prg_tbl[i] != NULL &&
  178.          ( MOS_stei(PRG_NAME_X-4,PRG_POS_Y(i)-2,
  179.                   PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17) != 0 ||
  180.            MOS_stei(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
  181.                   PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17) != 0 ||
  182.            MOS_stei(PRG_BITS_X-4,PRG_POS_Y(i)-2,
  183.                   PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17) != 0 ) )
  184.         return (PRG_NO+i);
  185.     }
  186.  
  187.     return NON_NO;
  188. }
  189. void    KEY_disp(int no)
  190. {
  191.     MOS_disp(OFF);
  192.     DSP_box(KEY_POS_X(no)-4,KEY_POS_Y(no)-2,
  193.         KEY_POS_X(no)+KEY_L+3,KEY_POS_Y(no)+17,
  194.         8,M_XOR);
  195.     MOS_disp(ON);
  196. }
  197. void    KEY_putstr(int no,char *key)
  198. {
  199.     MOS_disp(OFF);
  200.     gprintf(KEY_POS_X(no),KEY_POS_Y(no),CHR_COL,KEY_COL,"%-18.18s",key);
  201.     MOS_disp(ON);
  202. }
  203. void    PRG_disp(int no,char *prog,char *make,int bits)
  204. {
  205.     MOS_disp(OFF);
  206.     gprintf(PRG_NAME_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%-44.44s",prog);
  207.     gprintf(PRG_MAKE_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%-31.31s",make);
  208. /*****************************************************************
  209.     gprintf(PRG_BITS_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%s%s%s%s",
  210.     (bits & 1) ? "☆":"  ",
  211.     (bits & 2) ? "☆":"  ",
  212.     (bits & 4) ? "☆":"  ",
  213.     (bits & 8) ? "☆":"  ");
  214. ********************************************************************/
  215.     MOS_disp(ON);
  216. }
  217. void    MSG_disp(char *form,...)
  218. {
  219.     va_list arg;
  220.     char    tmp[256];
  221.  
  222.     va_start(arg,form);
  223.     vsprintf((char *)tmp,form,arg);
  224.     MOS_disp(OFF);
  225.     gputs(MSG_X,MSG_Y,XMENU_COL,MENU_COL,tmp);
  226.     MOS_disp(ON);
  227.     va_end(arg);
  228. }
  229. void    MSG2_disp(char *form,...)
  230. {
  231.     va_list arg;
  232.     char    tmp[256];
  233.  
  234.     va_start(arg,form);
  235.     vsprintf((char *)tmp,form,arg);
  236.     MOS_disp(OFF);
  237.     gputs(MSG2_X,MSG2_Y,XPRG_COL,PRG_COL,tmp);
  238.     MOS_disp(ON);
  239.     va_end(arg);
  240. }
  241. void    MENU_mask(int no,int sw)
  242. {
  243.     static struct {
  244.     int    x,y;
  245.     int    back;
  246.     char    *str;
  247.     int    *sw;
  248.     } menu_tbl[]={
  249.     { CLER_X,CLER_Y,MENU_COL,CLER_M,&sw_flg[0] },
  250.     { LIST_X,LIST_Y,MENU_COL,LIST_M,&sw_flg[1] },
  251.     { PRNT_X,PRNT_Y,MENU_COL,PRNT_M,&sw_flg[2] },
  252.     { INST_X,INST_Y,MENU_COL,INST_M,&sw_flg[3] },
  253.     { EXIT_X,EXIT_Y,MENU_COL,EXIT_M,&sw_flg[4] },
  254.     { BACK_X,BACK_Y,PRG_COL,BACK_M,&sw_flg[5] },
  255.     { NEXT_X,NEXT_Y,PRG_COL,NEXT_M,&sw_flg[6] },
  256.     { CLER_X,CLER_Y,MENU_COL,"検索にもどろう",&sw_flg[0] },
  257.     { LIST_X,LIST_Y,MENU_COL,"紹介ファイルの表示",&sw_flg[1] },
  258.     };
  259.  
  260.     MOS_disp(OFF);
  261.     gputs(menu_tbl[no].x,menu_tbl[no].y,
  262.     sw != 0 ? ACT_COL:NON_COL,menu_tbl[no].back,
  263.     menu_tbl[no].str);
  264.     MOS_disp(ON);
  265.     *menu_tbl[no].sw = sw;
  266. }
  267. void    SCRN_init(void)
  268. {
  269.     int     i;
  270.  
  271.     MOS_disp(OFF);
  272.     DSP_rbox(0,0,639,47,LINE_COL,MENU_COL,M_PSET);    /* Main Menu Back */
  273.     DSP_rbox(0,48,639,239,LINE_COL,KEY_COL,M_PSET);    /* KeyWord Menu Back */
  274.     DSP_rbox(0,240,639,479,LINE_COL,PRG_COL,M_PSET);    /* Prog Menu Back */
  275.  
  276.     DSP_wbox(CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,LINE_COL,MENU_COL,M_PSET);
  277.     DSP_wbox(LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LINE_COL,MENU_COL,M_PSET);
  278.     DSP_wbox(PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,LINE_COL,MENU_COL,M_PSET);
  279.     DSP_wbox(INST_X1,INST_Y1,INST_X2,INST_Y2,LINE_COL,MENU_COL,M_PSET);
  280.     DSP_wbox(EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,LINE_COL,MENU_COL,M_PSET);
  281.  
  282.     DSP_wbox(BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,LINE_COL,PRG_COL,M_PSET);
  283.     DSP_wbox(NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,LINE_COL,PRG_COL,M_PSET);
  284.  
  285.     for ( i = 0 ; i < 28 ; i++ ) {
  286.     DSP_wbox(KEY_POS_X(i)-4,KEY_POS_Y(i)-2,
  287.          KEY_POS_X(i)+KEY_L+3,KEY_POS_Y(i)+17,
  288.          LINE_COL,KEY_COL,M_PSET);
  289.     }
  290.     for ( i = 0 ; i < 9 ; i++ ) {
  291.     DSP_wbox(PRG_NAME_X-4,PRG_POS_Y(i)-2,
  292.          PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,
  293.          LINE_COL,PRG_COL,M_PSET);
  294.     DSP_wbox(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
  295.          PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,
  296.          LINE_COL,PRG_COL,M_PSET);
  297. /**********************************************************
  298.     DSP_wbox(PRG_BITS_X-4,PRG_POS_Y(i)-2,
  299.          PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,
  300.          LINE_COL,PRG_COL,M_PSET);
  301. ***********************************************************/
  302.     }
  303.  
  304.     DSP_msg("フリーウェア検索・インスト-ルソフト HELPER",
  305.         8,4,0x01,XMENU_COL,MENU_COL,M_PSET);
  306.     gputs((28*8),50,CHR_COL,KEY_COL,"お好みのメニュ-をどうぞ");
  307.     gputs((16*8),242,XPRG_COL,PRG_COL,"作    品    名");
  308.     gputs((57*8),242,XPRG_COL,PRG_COL,"作    者    名");
  309. /******************************************
  310.     gputs((71*8),242,XPRG_COL,PRG_COL,"TMBD");
  311. *******************************************/
  312.     MOS_disp(ON);
  313.  
  314.     MENU_mask(CLER_NO,OFF);
  315.     MENU_mask(LIST_NO,OFF);
  316.     MENU_mask(PRNT_NO,OFF);
  317.     MENU_mask(INST_NO,OFF);
  318.     MENU_mask(EXIT_NO,OFF);
  319.     MENU_mask(BACK_NO,OFF);
  320.     MENU_mask(NEXT_NO,OFF);
  321. }
  322.